package com.leet.tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class MaxDepth {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        int level = 0;
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        while (!q.isEmpty()){
            int size = q.size();
            for(int i = 0 ; i < size; i++){
                TreeNode head = q.poll();
                if(head.right != null) q.offer(head.right);
                if(head.left != null) q.offer(head.left);
            }
            level++;
        }
        return level;
    }
    // 像这种循环调用的,先判断一下为是否为空。然后题目条件（一般调用写的函数变成一个公式）+ 循环调用boolean循环。
    public boolean isBalanced(TreeNode root) {
        if(root == null) {
            return true;
        }
        // 找终止条件，return 两个且就行了
        // if(Math.abs(maxDepth(root.left) - maxDepth(root.right)) > 1){
        //    		return false;
        //    	}
        //    	return isBalanced(root.left) && isBalanced(root.right);
        return Math.abs(maxDepth(root.left)-maxDepth(root.right)) <= 1 && isBalanced(root.right) && isBalanced(root.left);
    }
}
